﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FlyingCircusWebIS.Models.Services.Utilidades;

namespace FlyingCircusWebIS.Models
{
    public class Voo
    {
        private int idVoo;
        private string nomeVoo;
        private Decimal precoVoo;
        private Decimal lucro;
        private DateTime dataCadastro;
        private int idAeroportoPartida;
        private DateTime dataPartida;
        private int idAeroportoChegada;
        private DateTime dataChegada;
        private int idAeronave;
        private int assentosComercializaveis;
        private int idPessoaUsuario;
        private string vooPromocional;
        private Decimal? descontoPromocao;


        // Composição de classes 
        public Aeroporto AeroportoPartida { get; set; }
        public Aeroporto AeroportoChegada { get; set; }
        public Aeronave Aeronave { get; set; }
        public Pessoa PessoaUsuario { get; set; }


        public string PrecoBaseReservaFormatado
        {
            get
            {
                CalculoReserva calc = new CalculoReserva();
                Decimal valor = calc.CalculaValor(PrecoVoo, AssentosComercializaveis, Lucro, null, DescontoPromocao, null);

                return valor.ToString("c");
            }
        }

        
        public string PrecoBaseReservaSemDescontoFormatado
        {
            get
            {
                CalculoReserva calc = new CalculoReserva();
                Decimal valor = calc.CalculaValor(PrecoVoo, AssentosComercializaveis, Lucro, null, null, null);

                return valor.ToString("c");
            }
        }
        

        public int IdVoo
        {
            get { return idVoo; }
            set
            {
                if (value > 0)
                {
                    idVoo = value;
                }
            }
        }


        public string NomeVoo
        {
            get { return nomeVoo; }
            set
            {
                if (value.Length <= 100)
                {
                    nomeVoo = value;
                }
            }
        }


        public Decimal PrecoVoo
        {
            get { return precoVoo; }
            set
            {
                if (value <= 99999999)
                {
                    precoVoo = value;
                }
            }
        }

        public Decimal Lucro
        {
            get { return lucro; }
            set
            {
                if (value < 10)
                {
                    lucro = value;
                }
            }
        }

        public string LucroValorFormatado
        {
            get { return (Lucro * 100) + "%"; }
        }

        public DateTime DataCadastro
        {
            get { return dataCadastro; }
            set { dataCadastro = value; }
        }

        public int IdAeroportoPartida
        {
            get { return idAeroportoPartida; }
            set
            {
                if (value > 0)
                {
                    idAeroportoPartida = value;
                }
            }
        }

        public DateTime DataPartida
        {
            get { return dataPartida; }
            set { dataPartida = value; }
        }

        public int IdAeroportoChegada
        {
            get { return idAeroportoChegada; }
            set
            {
                if (value > 0)
                {
                    idAeroportoChegada = value;
                }
            }
        }

        public DateTime DataChegada
        {
            get { return dataChegada; }
            set { dataChegada = value; }
        }

        public int IdAeronave
        {
            get { return idAeronave; }
            set
            {
                if (value > 0)
                {
                    idAeronave = value;
                }
            }
        }

        public int AssentosComercializaveis
        {
            get { return assentosComercializaveis; }
            set
            {
                if (value > 0)
                {
                    assentosComercializaveis = value;
                }
            }
        }

        public int IdPessoaUsuario
        {
            get { return idPessoaUsuario; }
            set
            {
                if (value > 0)
                {
                    idPessoaUsuario = value;
                }
            }
        }

        public string VooPromocional
        {
            get { return vooPromocional; }
            set
            {
                if (value != null && value.Length == 1)
                {
                    string vVooPromocionalUpper = value.ToUpper();
                    if (vVooPromocionalUpper.Equals("S") || vVooPromocionalUpper.Equals("N"))
                        vooPromocional = vVooPromocionalUpper;
                }
            }
        }

        public string DescontoPromocaoValorFormatado
        {
            get { return (DescontoPromocao * 100) + "%"; }
        }

        public Decimal? DescontoPromocao
        {
            get { return descontoPromocao; }
            set
            {
                if (value < 10)
                {
                    descontoPromocao = value;
                }
            }
        }
    }


    //Representa uma view do banco de dados, com o Join dos dados das entidades de Aeroporto e Cidade

    public class VooFormatado
    {
        public string NomeVoo { get; set; }
        public DateTime DataPartida { get; set; }
        public int IdAeroportoPartida { get; set; }
        public string NomeAeroportoPartida { get; set; }
        public string NomeCidadePartida { get; set; }
        public string UFPartida { get; set; }
        public string PaisPartida { get; set; }
        public int IdAeroportoChegada { get; set; }
        public DateTime DataChegada { get; set; }
        public string NomeAeroportoChegada { get; set; }
        public string NomeCidadeChegada { get; set; }
        public string UFChegada { get; set; }
        public string PaisChegada { get; set; }
        public int IdVoo { get; set; }
        public int IdAeronave { get; set; }
        public int AssentosComercializaveis { get; set; }
        public Decimal PrecoVoo { get; set; }
        public double Lucro { get; set; }
        public string VooPromocional { get; set; }
        public double DescontoPromocao { get; set; }
        public int IdPessoaUsuario { get; set; }
        public DateTime DataCadastro { get; set; }



    }
}